#pragma once
#include <iostream>
#include <string>
#include <memory>
#include <ctime>
#include <unistd.h>
#include <unordered_map>
using namespace std;
class session
{

public:
    session(const string& username, const string& status)
        : _username(username), _status(status)
    {
        _create_time = time(nullptr);
        _terminatal_time = _create_time + 300; // 默认300秒后过期
    }
    ~session()
    {
    }

    string _username;
    string _status;
    uint64_t _create_time;
    uint64_t _terminatal_time;
    // 用户其他状态可以后续添加
};

using session_ptr = shared_ptr<session>;

class session_manager
{

public:
    session_manager()
    {
        srand(time(nullptr) ^ getpid());
    }

    string add_session(session_ptr  s)
    {
        // 保证sessionid为正数
        uint32_t randomid = rand() + time(nullptr); // 随机数+时间戳，实际有形成sessionid的库，比如boost uuid库，或者其他第三方库等
        string sessionid = std::to_string(randomid);
        _sessions.insert(std::make_pair(sessionid, s));
        return sessionid;
    }
    session_ptr get_session(string sessionid)
    {
         
        if (_sessions.find(sessionid) == _sessions.end()){
            return nullptr;
        }
           
        return _sessions[sessionid];
    }

    ~session_manager() {}

private:
    unordered_map<string, session_ptr> _sessions;
};
